#include "sg_audio_dec.h"
#include "AudioDecode.h"

#include <iostream>
#include <new> // std::nothrow

sg_audio_dec_ins* sg_audio_create()
{
    auto p = new(std::nothrow) AudioDecode();
    p->init();
    return reinterpret_cast<sg_audio_dec_ins*>(p);
}

void sg_audio_release(sg_audio_dec_ins* dec)
{
    if (0 != dec)
    {
        auto pp = reinterpret_cast<AudioDecode*>(dec);
        delete pp;
    }
}

void sg_audio_reset(sg_audio_dec_ins* dec)
{
    if (0 != dec)
    {
        //auto pp = reinterpret_cast<sogou::speech::AudioDecode*>(dec);
        //pp->Reset();
    }
}

int sg_audio_decode(sg_audio_dec_ins* dec, char* indata, char* outdata, int inlen, int* outlen)
{
    if (0 != dec)
    {
        auto d = reinterpret_cast<AudioDecode*>(dec);
        uint8_t* out_buffer;
        int out_len = d->decode((const uint8_t*)indata, inlen, &out_buffer);
        if (out_len < 0) {
            fprintf(stderr, "Error while parsing\n");
            return -2;
        }

        if (*outlen < out_len) {
            memcpy(outdata, out_buffer, *outlen);
            return -3;
        }else{
            *outlen = out_len;
            memcpy(outdata, out_buffer, *outlen);
            return *outlen;
        }
    }
    else{
        return -1;
    }
}
